package com.jxb.myshop.web.servlet;

import cn.dsna.util.images.ValidateCode;
import com.jxb.myshop.common.Constant;
import com.jxb.myshop.util.StringUtil;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author: JXB
 * @Description:
 * @date: 2022/9/18 16:14
 * @param:  * @param null
 * @return: {@link null}
 * 这个是登录页面获取验证码和检查验证码的
**/
@WebServlet("/system")
public class SystemController extends BaseController {
    /**
     * @author: JXB
     * @Description:   检查验证码
     * @date: 2022/9/18 18:33
     * @param:  * @param null
     * @return: {@link null}
    **/
    public String checkCode(HttpServletRequest req, HttpServletResponse resp){
        // 用户提交的验证码
        String userCode = req.getParameter("code");
        // 保存在session的验证码
        String autoCode = (String) req.getSession().getAttribute(Constant.SystemConstant.VERIFICATION_CODE);
        if (StringUtil.isNotNull(userCode)&&userCode.equalsIgnoreCase(autoCode)) {
            // 验证码正确
            return Constant.Re.SUCCESS;
        }else {
            // 验证失败
            return Constant.Re.FAIL;
        }
    }

    /**
     *
     * @param req
     * @param resp
     * 通过jar包获取验证码
     * 写出验证码，需要使用response来写出,不需要转发,重定向,json写出
     */
    public void getCode(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //ValidateCode.jar 这个jar包名字就是要使用的对象名
        /*
        int width, 验证码图片宽度
        int height, 验证码图片高度
        int codeCount, 验证码个数,生成出来的验证码的字母数字的数量, 4个验证码 5个验证码 6个验证码
        int lineCount  干扰线数量
         */
        ValidateCode vc = new ValidateCode(90,30,4,35);
        String code = vc.getCode();
        System.out.println(code);
        //page(当前页面有效,验证码无法保存) request (一次请求内有效,验证码无法保存)
        //session(一次会话内有效) application(服务区启动到结束都有效,就比如多次会话，但服务器没有关闭，所以存储的验证码是上一次会话的验证码)
        //验证码会经常改变不适用application
        //验证码是每个用户进入登录页面都要有,但是application整个服务器都一起使用公用的
        //所以使用session保存用户验证码
        req.getSession().setAttribute(Constant.SystemConstant.VERIFICATION_CODE,code);
        // 写出验证码
        vc.write(resp.getOutputStream());
    }
}
